
Inform 6.14 now released
========================

The Inform compiler is finally getting another maintenance release,
the first since Inform 6.12 and 6.13 at the end of March.  There are
no new features, and almost all of the bugs fixed are arcane rarities
which, like lightning, never strike twice.  But for a few authors of
large games the first bug fix (below) may be important, and that
justifies making the release.

Two people have had rather ghostly sightings of "backpatch errors"
which, alas, have not been reproducible and so have not necessarily
been mended.  I've tried to clarify the position with this release
by making Inform print out text asking people to email me their
source code if such an error occurs again: I'm determined to fix it.

Until library 6/7 comes out, if you're going to use the -U option
of Inform 6.14 (to link in the library modules) you'll need to make
a slight correction to one of the library files, I'm afraid: from
"linklv.h", delete the line reading

    Import global gender_and_number;

(This is needed because Inform 6.14 is better at spotting linkage
errors than 6.13 was: the error was in the library all along.)

As a temporary measure, you can get hold of the new material from the
Inform 6 Home Page:

    http://www.gnelson.demon.co.uk/inform.html

Please note that there may be a delay of one to three days before
the new material becomes "visible" from your region of the Internet,
because of the regrettable way that my Internet service provider
organises its WWW space.  The material will in any case be filed
in its proper place at ftp.gmd.de shortly.

My thanks, as ever, to those who have emailed me bug reports.
I am always grateful for these, though it can sometimes take me
a couple of weeks to reply when I have a serious email backlog,
for which I apologise.  Please try to send me a short piece of
source code demonstrating what you think is wrong, if possible:
this saves on long explanations and makes it much easier for me
to find the problem.


    Graham Nelson
    8 September 1997


---------------------------------------------------------------------------
Modifications since 6.13 (as reproduced from the Technical Manual):

Bugs fixed:
"Parker's disease": In very large games only, backpatch errors being
    caused because the Z-code area of the Z-machine had overflowed
    past the size where the compiler could backpatch it (this tended
    to happen only if large amounts of text were printed by Inform code
    rather than being property values).  The Inform code generator now
    automatically writes any string of text longer than 32 characters
    into the static strings area: designers shouldn't notice any difference
    in behaviour of the "print" or "print_ret" statements.
    (The new arrangement is fractionally wasteful of bytes -- about
    2 to 4 bytes per string in excess of 32 characters -- but makes
    a big difference to the relative sizes of the code and strings
    areas.  "Advent" compiled the old way was 60.1% code, 17.3% strings;
    the new way, it comes out 40.6% code, 37.1% strings and is about
    1K bigger.  Most of the change occurs when compiling library
    messages; the effects are less dramatic on typical Inform code.)
A different cause of backpatch errors is attempting to link Version 5 modules
    into a Version 8 game.  If you're compiling a V8 game and want to
    link in the library, for instance, you'll need to compile the
    library modules with "-v8" as well.  Inform used not to check this
    error condition, but now does produce an error message if there's
    a version mismatch between game and module.
The linker also now checks that module and game are using the same
    Z-machine character set.  (If either one has made a Zcharacter directive
    which differs from the other, then the sets are inconsistent and
    linkage can't take place.  This will only ever happen if you're
    working in a language other than English, and trying to use the linker,
    and it can be cured by copying the Zcharacter directives out of the
    language definition file into a little include file, and including
    that in the source for your main file as well as the source for any
    modules of your own -- i.e., any modules other than the library ones.)
Finally, the linker checks for the error condition that the module asked
    to import a variable which turns out not to have been defined in the
    main game.
"continue" not working (branching to the non-existent label -1, in
    fact) if used inside a "switch" statement.  (It ought to continue
    the innermost loop containing the "switch" statement, if there is
    one, or give an error if there isn't.)
The two string escapes @@94 (producing a ^ character) and @@126
    (producing ~) in fact producing new-line and double-quote.
Conditional branches to rtrue or rfalse in assembly-language being
    reversed in sense.
Source code being garbled after any Include statement which ends at
    a byte position which is a multiple of 4096, minus 3.  (My thanks
    to Andrew Plotkin for both finding and diagnosing this.)
"For" loops in the form "for ( : : )" (with white space between the two
    colons), which occur in a routine after a previous one which happens
    to have a designer-defined label in a particular position, causing
    an incorrect if harmless "Label declared but not used" warning.
Very short programs testing "x provides <property>", but never reading,
    writing or otherwise using <property>, causing stack overflows or
    restarts.  Nobody would ever need such a program anyway.
Function calls not working, or having garbled arguments, in Version 3
    or Version 4 games (the Inform library requires Version 5 or better
    nowadays, so the ability to compile V3 or V4 files is only needed
    for interpreter testing).
The error message disallowing use of an assembly opcode if the Z-machine
    version doesn't support it, now quotes the opcode name.
Suppressed "declared but not used" warnings for global objects not being
    counted towards the total number reported as suppressed when Inform
    prints its final message.

Source code cleaning:
Three character conversions amended to unsigned character conversions.
Backpatch errors, which I devoutly hope not to see again, are now
    reported as a new category of error: "compiler errors" which produce
    an apologetic banner, asking the user to report the fault to me.
Link errors are reported more prettily (differently, anyway).

---------------------------------------------------------------------------
